package com.t.bricks.bussiness.db.mapper.orders;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.t.bricks.bussiness.db.entity.orders.Orders;
import com.t.bricks.bussiness.db.entity.orders.WaresInfo;
import com.t.bricks.bussiness.db.entity.orders.base.CustomerAccountBase;
import com.t.bricks.bussiness.db.entity.orders.base.OrdersDetailBase;

@Mapper
public interface OrdersMapper {
	
	/**
	 * 添加
	 * @Param orders
	 * @return int
	 */
	int add(Orders orders);
	
	/**
	 * 批量添加订单详情
	 * @Param details 订单详情集合
	 * @return int
	 */
	int addDetail(@Param("details") List<OrdersDetailBase> details);
	
	/**
	 * 删除购物车详情记录
	 * @param ordersId
	 * @return
	 */
	int delCart(@Param("ordersId") String ordersId);
	
	/**
	 * 购物车对应详情
	 * @param cartIds
	 * @param sCustomerId
	 * @return
	 */
	List<OrdersDetailBase> cartToDetail(
			@Param("cartIds") List<String> cartIds,
			@Param("sCustomerId") String sCustomerId);
	
	/**
	 * 支付
	 * @param sId
	 * @param sRechargeNo
	 * @param iVersion
	 * @return
	 */
	int pay(
		@Param("sId") String sId,
		@Param("sRechargeNo") String sRechargeNo,
		@Param("iVersion") Integer iVersion
	);
	
	/**
	 * 添加支付流水
	 * @param sOrdersId
	 * @return
	 */
	int addPayLog(@Param("sOrdersId") String sOrdersId);
	
	/**
	 * 销售
	 * @param sId
	 * @param iVersion
	 * @param sSalesmanId
	 * @param sSalesman
	 * @return
	 */
	int sales(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("sSalesmanId") String sSalesmanId,
		@Param("sSalesman") String sSalesman
	);
	
	/**
	 * 送出(待揽货)
	 * @param sId
	 * @param iVersion
	 * @param dDelivery
	 * @param sDelivery
	 * @param sDeliveryman
	 * @param sDeliveryNo
	 * @param sDelveryCode
	 * @return
	 */
	int delivery(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("dDelivery") Date dDelivery,
		@Param("sDelivery") String sDelivery,
		@Param("sDeliveryman") String sDeliveryman,
		@Param("sDeliveryNo") String sDeliveryNo,
		@Param("sDelveryCode") String sDelveryCode
	);
	
	/**
	 * 顾客签收
	 * @param sId
	 * @param iVersion
	 * @param sSignIn 签收说明
	 * @return
	 */
	int signIn(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("sSignIn") String sSignIn
	);
	
	/**
	 * 顾客确认
	 * @param sId
	 * @param iVersion
	 * @param sConfirm 确认说明
	 * @return
	 */
	int confirm(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("sConfirm") String sConfirm
	);
	
	/**
	 * 顾客退货申请
	 * @param sId
	 * @param iVersion
	 * @param sReturnApply 退货申请说明
	 * @return
	 */
	int returnApply(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("sReturnApply") String sReturnApply
	);
	
	/**
	 * 退货审核
	 * 8:退货审核不通过;9:退货申请通过;10:已退款
	 * @param sId
	 * @param iVersion
	 * @param iState
	 * @return
	 */
	int untreadAudit(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("iState") Integer iState
	);
	
	/**
	 * 审核
	 * @param sId
	 * @param iVersion
	 * @param sAuditId
	 * @param sAudit
	 * @return
	 */
	int audit(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("sAuditId") String sAuditId,
		@Param("sAudit") String sAudit
	);
	
	/**
	 * 复审
	 * @param sId
	 * @param iVersion
	 * @param sRecheckId
	 * @param sRecheck
	 * @return
	 */
	int recheck(@Param("sId") String sId,
		@Param("iVersion") Integer iVersion,
		@Param("sRecheckId") String sRecheckId,
		@Param("sRecheck") String sRecheck
	);
	
	/**
	 * 测算商品运费
	 * @param details 订单详情集合
	 * @param sArea 目的地
	 * @return
	 */
	BigDecimal reckonFreight(
		@Param("details") List<OrdersDetailBase> details,
		@Param("sArea") String sArea
	);
	
	/**
	 * 查询商品简化信息
	 * @param sIds 商品编号集合
	 * @return
	 */
	List<WaresInfo> findWaresInfo(@Param("sIds") List<String> sIds);
	
	/**
	 * 根据订单号更新库存
	 * @param sId 订单号
	 * @return
	 */
	int changeStock(@Param("sId") String sId);
	
	/**
	 * 订单支付时间过期处理
	 * @param iMinute 时间间隔(分钟)
	 * @return
	 */
	int timeOut(@Param("iMinute") Integer iMinute);
	
	/**
	 * 新增退单记录
	 * @Param sOrderId
	 * @return int
	 */
	int addRetrun(@Param("sOrderId") String sOrderId);
	
	/**
	 * 根据订单取对应顾客账户
	 * @param sOrderId 订单记录编号
	 * @return
	 */
	CustomerAccountBase findAccountByOrder(@Param("sOrderId") String sOrderId);
	
	/**
	 * 顾客订单中是否包含已经购买过的限购商品
	 * @Param sOrderId 订单编号
	 * @Param sCustomerId 顾客编号
	 * @return int
	 */
	int isAstrictBuy(
		@Param("sOrderId") String sOrderId,
		@Param("sCustomerId") String sCustomerId
	);
	
	/**
	 * 新增限购记录(支付时)
	 * @Param sOrderId 订单编号
	 * @return int
	 */
	int addAstrictBuy(
		@Param("sOrderId") String sOrderId,
		@Param("sCustomerId") String sCustomerId
	);
	
}
